package edu.rjh.reflection.daili_1;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyUtil {
    public static Star getProxy(BigStar bigStar) {
        Star star = (Star) Proxy.newProxyInstance(
                ProxyUtil.class.getClassLoader(),//参数一：用于指定使用哪个类加载器，因为要生成代理对象，所以需要指定一个类加载器
                new Class[]{Star.class},//参数二：用于指定接口，这些接口用于指定生成的代理长什么样，也就是用哪些方法
                new InvocationHandler() {
                    // 参数三：用于指定生成的代理对象要干什么事
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        /**
                         * proxy：代理对象
                         * method：代理对象要调用的方法——将要运行的程序
                         * args：代理对象要调用的方法的参数
                         */
                        if ("sing".equals(method.getName())){
                            System.out.println("代理对象开始代理了，执行的是"+method.getName()+"方法");
                        }else if ("dance".equals(method.getName())){
                            System.out.println("代理对象开始代理了，执行的是"+method.getName()+"方法");
                        }

                        return method.invoke(bigStar,args);//调用方法
                    }
                }
        );
        return star;
    }
}
